/*
 * (C) Copyright 2007-2013
 * Allwinner Technology Co., Ltd. <www.allwinnertech.com>
 * Jerry Wang <wangflord@allwinnertech.com>
 *
 * See file CREDITS for list of people who contributed to this
 * project.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 */

#ifndef  __private_uboot_h__
#define  __private_uboot_h__

#include "spare_head.h"
/******************************************************************************/
/*               the control information stored in file head                  */
/******************************************************************************/
struct spare_boot_ctrl_head
{
	unsigned int  jump_instruction;   // one intruction jumping to real code
	unsigned char magic[MAGIC_SIZE];  // ="u-boot"
	unsigned int  check_sum;          // generated by PC
	unsigned int  align_size;		  // align size in byte
	unsigned int  length;             // the size of all file
	unsigned int  uboot_length;       // the size of uboot
	unsigned char version[8];         // uboot version
	unsigned char platform[8];        // platform information
	int           reserved[1];        //stamp space, 16bytes align
};

/******************************************************************************/
/*                          the data stored in file head                      */
/******************************************************************************/
struct spare_boot_data_head
{
	unsigned int                dram_para[32];
	int                         run_clock;              // Mhz
	int                         run_core_vol;           // mV
	int                         uart_port;              // UART控制器编号
	normal_gpio_cfg             uart_gpio[2];           // UART控制器(调试打印口)GPIO信息
	int                         twi_port;               // TWI控制器编号
	normal_gpio_cfg             twi_gpio[2];            // TWI控制器GPIO信息，用于控制TWI
	int                         work_mode;              // 工作模式
	int                         storage_type;           // 存储介质类型  0：nand   1：sdcard    2: spinor
	normal_gpio_cfg             nand_gpio[32];          // nand GPIO信息
	char                        nand_spare_data[256];	// nand 额外信息
	normal_gpio_cfg             sdcard_gpio[32];		// sdcard GPIO信息
	char                        sdcard_spare_data[256];	// sdcard 额外信息
	int                         secureos_exist;
	uint                        uboot_start_sector_in_mmc;  //use in OTA update
	int							multi_config_exist;		//多份配置开关
	int                         dtb_offset;                 //device tree in uboot
	int                         boot_package_size;          //boot package size, boot0 pass this value
	int							dram_scan_size;				//dram 空间大小,单位 M 
}; // 256bytes align

struct spare_boot_ext_head
{
	int data[4];
};

struct spare_boot_head_t
{
	struct spare_boot_ctrl_head    boot_head;
	struct spare_boot_data_head    boot_data;
	struct spare_boot_ext_head     boot_ext[16];
};

struct spare_monitor_head
{
	unsigned int  jump_instruction;   // one intruction jumping to real code
	unsigned char magic[MAGIC_SIZE];  // ="u-boot"
	unsigned int  scp_base;           // generated by PC
	unsigned int  nboot_base;		   // align size in byte
	unsigned int  nos_base;           // the size of all file
	unsigned int  secureos_base;      // the size of uboot
	unsigned char version[8];         // uboot version
	unsigned char platform[8];        // platform information
	int           reserved[1];         //stamp space, 16bytes align
};

extern struct spare_boot_head_t  uboot_spare_head;
extern unsigned long get_spare_head_size(void);
#endif


